#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>

/*
Erik Lawing CS362 Software Engineering II Quiz
Due July 22 by end of day.

Points possible: 20

Description: Implement a random tester for the function testme() in testme.c that is capable of printing the error message.
You should implement inputChar() and inputString() to produce random values. Write up the development of your random tester
and how it finds the error message as randomstring.txt. Submit testme.c and randomstring.txt under your onid directory in google code.

(under your onid directory and not under dominion directory).
*/
char inputChar()
{
    // TODO: rewrite this function

	const int RANGE_MAX=126;
	int c;

	c=rand()%RANGE_MAX;
	return (char)c;
}

 void inputString(char *s)
{
    // TODO: rewrite this function

	int i;

	for(i=0;i<7;i++){

		s[i]=inputChar();

	}
	return;
}

void testme()
{
  int tcCount = 0;
  char *s;
  s=malloc(sizeof(char)*6);

  char c;
  int state = 0;
  while (1)
  {
    tcCount++;
    c = inputChar();
    inputString(s);

    printf("Iteration %d: c = %c, s = %s, state = %d\n", tcCount, c, s, state);

    if (c == '[' && state == 0) state = 1;
    if (c == '(' && state == 1) state = 2;
    if (c == '{' && state == 2) state = 3;
    if (c == ' ' && state == 3) state = 4;
    if (c == 'a' && state == 4) state = 5;
    if (c == 'x' && state == 5) state = 6;
    if (c == '}' && state == 6) state = 7;
    if (c == ')' && state == 7) state = 8;
    if (c == ']' && state == 8) state = 9;

    if (s[0] == 'r' && s[1] == 'e' && s[2] == 's' && s[3] == 'e' && s[4] == 't' && s[5] == '\0' && state == 9)
    {
      printf("error ");
      exit(200);
    }

  }
}


int main(int argc, char *argv[])
{
    srand(time(123456));
    testme();
    return 0;
}
